/** 
 * UIMA Annotation Mapper
 * Copyright (C) 2010  Nicolas Hernandez
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *     http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package fr.univnantes.lina.uima.mapper.annotation.located;

import java.util.List;
import org.apache.uima.jcas.tcas.Annotation;

/**
 * Interface declaring the method signatures 
 * handling the annotations of a LocalizedAnnotation
 * 
 * @author hernandez
 *
 */
public interface RelativelyLocated_Interface {

	/*
	 * set methods
	 * define an empty list or erase an existing list 
	 */
	public void setCurrent(List<Annotation> annotationList);
	public void setPrevious(List<Annotation> annotationList);
	public void setNext(List<Annotation> annotationList);
	public void setSuper(List<Annotation> annotationList);
	public void setSub(List<Annotation> annotationList);
	public void setPartialPrevious(List<Annotation> annotationList);
	public void setPartialNext(List<Annotation> annotationList);
	
	/*
	 * add methods 
	 * add an annotation or an annotationList to an existing annotationList
	 */
	public void addCurrent(Annotation annotation);
	public void addPrevious(Annotation annotation);
	public void addNext(Annotation annotation);
	public void addSuper(Annotation annotation);
	public void addSub(Annotation annotation);
	public void addPartialPrevious(Annotation annotation);
	public void addPartialNext(Annotation annotation);
	
	public void addCurrent(List<Annotation> annotationList);
	public void addPrevious(List<Annotation> annotationList);
	public void addNext(List<Annotation> annotationList);
	public void addSuper(List<Annotation> annotationList);
	public void addSub(List<Annotation> annotationList);
	public void addPartialPrevious(List<Annotation> annotationList);
	public void addPartialNext(List<Annotation> annotationList);
	
	/*
	 * get methods
	 */
	public List<Annotation> getCurrent();
	public List<Annotation> getPrevious();
	public List<Annotation> getNext();
	public List<Annotation> getSuper();
	public List<Annotation> getSub();
	public List<Annotation> getPartialPrevious();
	public List<Annotation> getPartialNext();
	public List<Annotation> getAllPrevious(); // Previous + PartialPrevious 
	public List<Annotation> getAllNext();

	/*
	 * isEmpty methods
	 */
	public boolean isEmpty(List<Annotation> annotationList);
	public boolean isEmptyCurrent();
	// return isEmpty(getCurrent());
	public boolean isEmptyPrevious();
	public boolean isEmptyNext();
	public boolean isEmptySuper();
	public boolean isEmptySub();
	public boolean isEmptyPartialPrevious();
	public boolean isEmptyPartialNext();
	public boolean isEmptyAllPrevious();
	public boolean isEmptyAllNext();

	/*
	 * contains methods
	 */
	public boolean contains(List<Annotation> annotationList, Annotation annotation);
	public boolean containsCurrent(Annotation annotation); 
	// return contains(getCurrent(),Annotation annotation);
	public boolean containsPrevious(Annotation annotation);
	// return contains(getPrevious(),Annotation annotation)
	public boolean containsNext(Annotation annotation);
	public boolean containsSuper(Annotation annotation);
	public boolean containsSub(Annotation annotation);
	public boolean containsPartialPrevious(Annotation annotation);
	public boolean containsPartialNext(Annotation annotation);
	public boolean containsAllPrevious(Annotation annotation);
	public boolean containsAllNext(Annotation annotation);

	/*
	 * share
	 */
	//shareCovering // either sup or sub
	//sharePartialCovering
	//covers
	//	

}
